package com.shop.loan.channel.lihuo;

import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

/**
 * @author java
 * @description 通用签名
 * 除 sign 字段外，所有参数按照字段名 ASCII 从小到大排序后使用,最后
 * 拼接约定的 key（即商户密钥，key 不参与排序）。
 */
public class LiHuoSignUtil {

    public static String sign(Map<String, Object> paramMap, String productSecret) {
        paramMap.remove("sign");
        SortedMap<String, Object> sMap = new TreeMap(paramMap);
        StringBuffer stringBuffer = new StringBuffer();
        for (Map.Entry<String, Object> m : sMap.entrySet()) {
            Object value = m.getValue();
            if (value != null && StringUtils.isNotBlank(String.valueOf(value))) {
                stringBuffer.append(m.getKey()).append("=").append(m.getValue()).append("&");
            }
        }
        stringBuffer.delete(stringBuffer.length() - 1, stringBuffer.length());
        stringBuffer.append("&key=").append(productSecret);
        return SecureUtil.md5(stringBuffer.toString());
    }


    public static Boolean verifySignature(Map params, String productSecret) {
        JSONObject bodyJson = new JSONObject(params);
        String sign = bodyJson.getString("sign").toLowerCase();
        return sign(params, productSecret).equals(sign);
    }

}

